МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА"
Інститут комп’ютерних наук та інформаційних технологій
Кафедра програмного забезпечення
ЗВІТ
До лабораторної роботи № 5
На тему: «SQL/CLR, Using .NET Procedural Code, UDT, TRIGGERS»
З дисципліни : "Бази даних ч.2"
Лектор:
доцент. каф. ПЗ
Павич Н.Я
Лабораторна робота № 5.
SQL/CLR, Using .NET Procedural Code, UDT, TRIGGERS
Завдання:
Виконайте всі пункти і запишіть відповіді на поставлені в них питання.
Створіть проект на .NET, опишіть функцію (UDF) згідно варіанту, каталогізуйте збірку та функцію у SQL Server, напишіть демонстраційний код T-SQL для використання цієї функції.
Створіть користувацький тип даних (UDT) згідно варіанту, каталогізуйте збірку, і приведіть демонстраційний T-SQL код. UDT має містити щонайменше 2 поля різного типу даних (їх можна розмежувати, наприклад знаком #, $ тощо).
Створіть тригер та продемонструйте його використання.
Завантаження і каталогізації збірки
Каталогізація збірки:
CREATE ASSEMBLY METRICCONVERTER
FROM 'c:\types\metricconverter.dll'
GO
Каталогізація функції:
CREATE FUNCTION KilometersToMiles (@a float)
returns float
external name MetricConverter.[DM.EssentialYukon.MetricConverter].KilometersToMiles
GO
Спробуємо видалити оригінальний файл збірки (MetricConverter.dll), який використовувався при запуску CREATE ASSEMBLY. Збірка не створюється:
Msg 6501, Level 16, State 7, Line 2
CREATE ASSEMBLY failed because it could not open the physical file "c:\types\metricconverter.dll": 2(Не удается найти указанный файл.).
Спробуємо видалити збірку MetricConverter. Не вдалося – потрібно спершу видалити всі залежності:
Msg 6590, Level 16, State 1, Line 5
DROP ASSEMBLY failed because 'METRICCONVERTER' is referenced by object 'KilometersToMiles'.
Залежності збірки
Каталогізовуємо збірку:
CREATE ASSEMBLY TempFunctions
FROM 'c:\types\tempfunctions.dll'
GO
Виконуємо наступний Transact-SQL код для вивчення SQL Server представлень метаданих:
SELECT * FROM sys.assemblies
GO
SELECT * FROM sys.assembly_files
GO
Тепер зроблю збірку «видимою»:
CREATE ASSEMBLY MetricConverter from 'c:\types\MetricConverter.dll'
GO
ALTER ASSEMBLY MetricConverter
ADD FILE FROM 'c:\types\MetricConverter.pdb'
ALTER ASSEMBLY MetricConverter
WITH VISIBILITY = ON
GO
Результат:
Command(s) completed successfully.
Пробую передати значення null в каталогізовану функцію:
use demo1
go
CREATE ASSEMBLY MetricConverter
FROM 'C:\types\metricconverter.dll'
go
create function KilogramsToPounds (@a float)
returns float
external name MetricConverter.[DM.EssentialYukon.MetricConverter].KilogramsToPounds
go
declare @x float
declare @y float
set @x = null
set @y = dbo.KilogramsToPounds(@x)
print 'KG'
if @y is null print 'NULL'
print @y
go
Результат:
Msg 6569, Level 16, State 1, Line 6
'KilogramsToPounds' failed because parameter 1 is not allowed to be null.
Створюю таблицю:
create table readings(
ReadingDate datetime not null,
City varchar(20) not null,
HiTemp_Far real,
HiTemp_Cen as dbo.FahrenheitToCentigrade(hitemp_far) PERSISTED
)
Результат:
Msg 4936, Level 16, State 1, Line 22
Computed column 'HiTemp_Cen' in table 'readings' cannot be persisted because the column is non-deterministic.
Додаю перед оголошенням функції рядок
[SqlFunction(DataAccess=DataAccessKind.None, IsDeterministic=true, IsPrecise=true)]
Тепер запит виконується успішно.
Додаю дані в таблицю:
use Demo1
go
INSERT readings VALUES('7/4/03', 'Boston', 75)
go
INSERT readings VALUES('7/5/03', 'Boston', 90)
Тепер роблю так щоб функція повертала значення null при переданні null значення:
create function FahrenheitToCentigrade (@a float)
returns float with RETURNS NULL ON NULL INPUT
external name MetricConverter.[DM.EssentialYukon.MetricConverter].FahrenheitToCentigrade
declare @x float
declare @y float
set @x = NULL
set @y = dbo.FahrenheitToCentigrade(@x)
if @y is null print 'NULL'
print @y
go
Результат: NULL
Змінюю типи вхідних і вихідних даних:
[SqlFunction(DataAccess = DataAcce...